*2000 and 2004 American National Elections Studies Surveys*
*Factor Analysis of Mass Issue Attitudes*
*Thurs. 22 December 2011*
*Updated: Wed. 18 January 2012*
*Updated: Mon. 23 January 2012*
*Updated: Tues. 24 January 2012*
*Updated: Friday 27 January 2012*
*Updated: Mon. 30 January 2012*
*Updated: Tues. 7 February 2012*
*Updated: Mon. 23 April 2012*
*Updated: Mon. 4 June 2012*
*Updated: Friday September 28 2012*
*Updated: Friday November 30 2012*
*Updated: Mon. December 3 2012*
*Updated: Tues. December 4 2012*
*Updated: Wed. December 5 2012*
*Updated: Thurs. December 6 2012*
*Updated: Tues. December 11 2012*
*Updated: Thurs. December 13 2012*
*Updated: Mon. December 17 2012*
*Updated: Mon. January 7 2013*
*Updated: Thurs. January 24 2013*
*Updated: Mon. 28 January 2013*
*Updated: Sat. 3 August 2013*
*Updated: Mon. 5 August 2013*

****************
*2000 ANES Data*
****************

****************
*Recode symbolic predisposition variables*
****************

*Party identification*

*Note: Here, we recode the party identification variable by dividing "strong* 
*partisans" from "not strong partisans."  This step is done to demonstrate* 
*that the high level of constraint exhibited by sophisticated* 
*citizens � particularly "hyper" sophisticates � is not merely* 
*an artifact of partisanship*

gen Partyidm00 = V000523
replace Partyidm00 = . if V000523 == 9
replace Partyidm00 = 1 if V000523 == 2
replace Partyidm00 = 1 if V000523 == 3
replace Partyidm00 = 1 if V000523 == 4
replace Partyidm00 = 1 if V000523 == 5
replace Partyidm00 = 1 if V000523 == 7
replace Partyidm00 = 1 if V000523 == 8
replace Partyidm00 = 2 if V000523 == 0 
replace Partyidm00 = 2 if V000523 == 6
label var Partyidm00 ///
"Partisan Strength"
label define Partisanstrengthm00 /// 
1 "1 Not strong identifiers" 2 "2 Strong party identifiers"
label values Partyidm00 Partisanstrengthm00

*Ideological self-identification*

gen Ideologym00 = V000446
replace Ideologym00 = . if V000446 == 0
replace Ideologym00 = . if V000446 == 8
replace Ideologym00 = . if V000446 == 9
label var Ideologym00 ///
"Ideological Self-identification"
label define Ideologicalidentificationm00 /// 
1 "1 Extremely Liberal" 7 "7 Extremely conservative"
label values Ideologym00 Ideologicalidentificationm00

****************
*Recode issue attitude variables*

*Note: The eleven issues included in the analysis for 2000 are the following:* 
*services spending, welfare spending, government versus private health* 
*insurance, child care spending, public school spending, assistance to blacks,*
*spending on the environment, defense spending, abortion, homosexual feeling* 
*thermometer and government efforts to protect homosexuals* 
*from job discrimination*

*Note: All issue attitude variables except the government versus private* 
*health insurance, assistance to blacks, defense spending and homosexual* 
*job discrimination variables are reverse coded so higher values reflect* 
*more conservative attitudes*
*****************

*Services*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Servicesm00 = V000550
replace Servicesm00 = . if V000550 == 0
replace Servicesm00 = . if V000550 == 8
replace Servicesm00 = . if V000550 == 9
replace Servicesm00 = 1 if V000550 == 5
replace Servicesm00 = 2 if V000550 == 4
replace Servicesm00 = 4 if V000550 == 2
replace Servicesm00 = 5 if V000550 == 1
label var Servicesm00 ///
"Attitudes Toward Government Provision of Services versus Lower Spending"
label define Servicesgovm00 /// 
1 "1 Increase spending and services a great deal" /// 
2 "2 Increase spending and services only some" ///
3 "3 Stay same as now" 4 "4 Reduce spending and services only some" /// 
5 "5 Reduce spending and services a great deal"
label value Servicesm00 Servicesgovm00

*Welfare spending*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Welfarem00 = V000676
replace Welfarem00 = . if V000676 == 0
replace Welfarem00 = . if V000676 == 8 
replace Welfarem00 = . if V000676 == 9 
replace Welfarem00 = 2 if V000676 == 5
replace Welfarem00 = 4 if V000676 == 7
label var Welfarem00 /// 
"Attitudes Toward Welfare Spending"
label define Welfarespendingm00 /// 
1 "1 Increased" 2 "2 Kept about the same" 3 "3 Reduced" 4 "4 Cut out entirely"
label values Welfarem00 Welfarespendingm00

*Government versus private health insurance*

gen Insurancem00 = V000614
replace Insurancem00 = . if V000614 == 0
replace Insurancem00 = . if V000614 == 8
replace Insurancem00 = . if V000614 == 9
label var Insurancem00 /// 
"Attitudes Toward Government versus Private Insurance Plans"
label define Insuranceplanm00 /// 
1 "1 Strongly�government insurance plan" /// 
2 "2 Not strongly�government insurance plan" ///
3 "3 Stay the same as it is now" 4 "4 Not strongly�individual insurance" /// 
5 "5 Strongly�individual insurance"
label values Insurancem00 Insuranceplanm00

*Child care spending*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Childcarem00 = V000685
replace Childcarem00 = . if V000685 == 0
replace Childcarem00 = . if V000685 == 8
replace Childcarem00 = . if V000685 == 9
replace Childcarem00 = 2 if V000685 == 5
replace Childcarem00 = 4 if V000685 == 7
label var Childcarem00 ///
"Attitudes Toward Spending on Child Care"
label define Childcarespendingm00 /// 
1 "1 Increased" 2 "2 Kept about the same" 3 "3 Reduced" 4 "4 Cut out entirely"
label values Childcarem00 Childcarespendingm00

*Public school spending*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Schoolsm00 = V000683
replace Schoolsm00 = . if V000683 == 0
replace Schoolsm00 = . if V000683 == 8
replace Schoolsm00 = . if V000683 == 9
replace Schoolsm00 = 2 if V000683 == 5
replace Schoolsm00 = 4 if V000683 == 7
label var Schoolsm00 ///
"Attitudes Toward Public School Spending"
label define Schoolspendingm00 /// 
1 "1 Increased" 2 "2 Kept about the same" 3 "3 Reduced" 4 "4 Cut out entirely"
label values Schoolsm00 Schoolspendingm00

*Government assistance to blacks*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Assistblacksm00 = V000645
replace Assistblacksm00 = . if V000645 == 0
replace Assistblacksm00 = . if V000645 == 8
replace Assistblacksm00 = . if V000645 == 9
label var Assistblacksm00 ///
"Attitudes Toward Government Assistance to Blacks"
label define Assistanceblacksm00 /// 
1 "1 Government help blacks to great extent" /// 
2 "2 Government help blacks to some extent" ///
3 "3 Other/Neither/Depends" 4 "4 Should help themselves to some extent" /// 
5 "5 Should help themselves to great extent"
label values Assistblacksm00 Assistanceblacksm00

*Spending on the environment*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Environm00 = V000682
replace Environm00 = . if V000682 == 8
replace Environm00 = . if V000682 == 9
replace Environm00 = 2 if V000682 == 5
replace Environm00 = 4 if V000682 == 7
label var Environm00 ///
"Attitudes Toward Environmental Spending"
label define Environmentm00 /// 
1 "1 Increased" 2 "2 Kept about the Same" 3 "3 Decreased" 4 "4 Cut out entirely"
label values Environm00 Environmentm00

*Defense spending*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Defensem00 = V000587
replace Defensem00 = . if V000587 == 0
replace Defensem00 = . if V000587 == 8
replace Defensem00 = . if V000587 == 9
label var Defensem00 ///
"Attitudes Toward Defense Spending"
label define Defensespendingm00 /// 
1 "1 Decrease defense spending a lot" ///
2 "2 Decrease defense spending a little" /// 
3 "3 About the right amount" 4 "4 Increase defense spending a little" /// 
5 "5 Increase defense spending a lot"
label values Defensem00 Defensespendingm00

*Abortion*
*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

gen Abortionm00 = V000694
replace Abortionm00 = . if V000694 == 0
replace Abortionm00 = . if V000694 == 7
replace Abortionm00 = . if V000694 == 8
replace Abortionm00 = . if V000694 == 9
replace Abortionm00 = 1 if V000694 == 4
replace Abortionm00 = 2 if V000694 == 3
replace Abortionm00 = 3 if V000694 == 2
replace Abortionm00 = 4 if V000694 == 1
label var Abortionm00 ///
"Attitudes Toward Abortion"
label define Abortionattitudesm00 /// 
1 "1 By law, a woman should always be able to obtain an abortion as a matter of personal choice" /// 
2 "2 The law should permit abortion for reasons other than rape, incest, or danger to the woman's life, but only after the need for the abortion has been clearly established" ///
3 "3 The law should permit abortion only in case of rape, incest or when the woman's life is in danger" /// 
4 "4 By law, abortion should never be permitted"
label values Abortionm00 Abortionattitudesm00

*Feeling thermometer of homosexuals*

*Note: This variable is reverse coded so higher values reflect more* 
*conservative attitudes*

*Although recoding feeling thermometer variables is rare, the step is taken* 
*here in order to ensure that all variables in the analysis are coded in the* 
*same direction, thus avoiding potentially confusing negative factor loadings*
 
gen Homosexualsthermm00 = V001321
replace Homosexualsthermm00 = . if V001321 == 996
replace Homosexualsthermm00 = . if V001321 == 997
replace Homosexualsthermm00 = . if V001321 == 998
replace Homosexualsthermm00 = . if V001321 == 999
label var Homosexualsthermm00 ///
"Feeling Thermometer of Homosexuals"
label define Homosexualsthermometermm00 /// 
0 "0 Cold" 100 "100 Warm"
label var Homosexualsthermm00 Homosexualsthermometerm00

gen Rhomosexualsthermm00 = 100 - Homosexualsthermm00
label var Rhomosexualsthermm00 ///
"Feeling Thermometer of Homosexuals"
label define Rhomosexualsthermometerm00 /// 
0 "0 Warm" 100 "100 Cold"
label values Rhomosexualsthermm00 Rhomosexualsthermometerm00

*Government efforts to protect homosexuals from job discrimination*

gen Jobdiscriminationm00 = V001481
replace Jobdiscriminationm00 = . if V001481 == 0
replace Jobdiscriminationm00 = . if V001481 == 8
replace Jobdiscriminationm00 = . if V001481 == 9
label var Jobdiscriminationm00 /// 
"Attitudes Toward Government Efforts to Protect Homosexuals from Job Discrimination"
label define Jobdiscriminationgaysm00 /// 
1 "1 Favor strongly" 2 "2 Favor not strongly" 3 "3 Disapprove not strongly" /// 
4 "4 Disapprove strongly"

****************
*Recode political sophistication variables*

*Note: Political sophistication is conceptualized in this analysis as a*
*combination of political knowledge, interest and involvement*

*Note: These variables are all reverse coded so that higher values reflect* 
*greater political sophistication*
****************

****************
*Recode political knowledge variable*

*Note: Political knowledge is conceptualized in this analysis as the* 
*interviewer's assessment of the respondent's level of general* 
*political information*
****************

*Political knowledge*
*Note: This variable is reverse coded so that higher values reflect greater* 
*political knowledge*

gen Knowledgem00 = V001033
replace Knowledgem00 = . if V001033 == 9
replace Knowledgem00 = 0 if V001033 == 5 
replace Knowledgem00 = 1 if V001033 == 4
replace Knowledgem00 = 2 if V001033 == 3
replace Knowledgem00 = 3 if V001033 == 2
replace Knowledgem00 = 4 if V001033 == 1
label var Knowledgem00 /// 
"Interviewer's Assessment of the Respondent's Level of Political Information"
label define Knowledgepoliticsm00 /// 
0 "0 Very low" 1 "1 Fairly Low" 2 "2 Average" 3 "3 Fairly High" 4 "4 Very High"
label values Knowledgem00 Knowledgepoliticsm00

****************
*Divide the political knowledge variable by the number of non-zero categories* 
*it contains (4) so that the variable ranges from zero to one*
****************

gen Knowledge2m00 = Knowledgem00/4

****************
*Recode interest in the political campaigns variable*
****************

*Interest in the campaigns*
*Note: This variable is reverse coded so that higher values reflect greater* 
*political interest*

gen Interestm00 = V001201
replace Interestm00 = . if V001201 == 0
replace Interestm00 = . if V001201 == 8
replace Interestm00 = . if V001201 == 9
replace Interestm00 = 0 if V001201 == 5
replace Interestm00 = 1 if V001201 == 3
replace Interestm00 = 2 if V001201 == 1
label var Interestm00 ///
"Interest in the the Campaigns"
label define Interestcampaignm00 /// 
0 "0 Not much interested" 1 "1 Somewhat interested" 2 "2 Very much interested"
label values Interestm00 Interestcampaignm00 

****************
*Divide the interest in the campaigns variable by the number of non-zero* 
*categories it contains (2) so that the variable ranges from zero to one*
****************

gen Interest2m00 = Interestm00/2

****************
*Recode political involvement variables*
*Note: These variables are recoded so that higher values reflect greater* 
*political involvement*
****************

*Attendance at political events*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Attendm00 = V001227
replace Attendm00 = . if V001227 == 0
replace Attendm00 = 0 if V001227 == 5
label var Attendm00 ///
"Attend a Political Event"
label define Attendancem00 0 "No" 1 "Yes"
label values Attendm00 Attendancem00

*Work for a political candidate*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Workm00 = V001228
replace Workm00 = . if V001228 == 0
replace Workm00 = 0 if V001228 == 5
label var Workm00 ///
"Work for a Political Candidate"
label define Workedm00 0 "No" 1 "Yes"
label values Workm00 Workedm00

*Political expression in the form of a campaign button or sticker*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Displaym00 = V001226
replace Displaym00 = . if V001226 == 0
replace Displaym00 = . if V001226 == 8
replace Displaym00 = 0 if V001226 == 5
label var Displaym00 ///
"Display a Campaign Button or Sticker"
label define Displaypoliticsm00 0 "No" 1 "Yes"
label values Displaym00 Displaypoliticsm00

*Donation to a political candidate*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Donatecm00 = V001229
replace Donatecm00 = . if V001229 == 0
replace Donatecm00 = . if V001229 == 8
replace Donatecm00 = 0 if V001229 == 5
label var Donatecm00 ///
"Donate money to a political candidate"
label define Donatecandidatem00 0 "No" 1 "Yes"
label values Donatecm00 Donatemoneycm00

*Donation to a political party*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Donatepm00 = V001231
replace Donatepm00 = . if V001231 == 0
replace Donatepm00 = 0 if V001231 == 5
label var Donatepm00 ///
"Donate money to a political party"
label define Donatepartym00 0 "No" 1 "Yes"
label values Donatepm00 Donatepartym00

****************
*Create a five-point political involvement index that will be used to display* 
*summary statistics of political involvement*
****************

gen Involvementindexm00 = Attendm00 + Workm00 + Displaym00 + Donatecm00 /// 
+ Donatepm00

summarize Involvementindexm00

****************
*Create an eleven-point political sophistication index that combines measures* 
*of political knowledge, interest and involvement*

*Note: This index will be used to display summary statistics of the* 
*sophistication measure*
****************

gen Sophisticationindexm00 = Knowledgem00 + Interestm00 + Involvementindexm00

summarize Sophisticationindexm00

*Note: The maximum observed value of the sophistication index in this year* 
*is 10*

****************
*Plot a histogram of the sophistication index*
****************

histogram Sophisticationindexm00, aspect(1) fcolor(gs14) lcolor(black) /// 
discrete scheme(s1mono) ///
plotregion(lcolor(black))graphregion(margin(medsmall)) ///
title("2000", size(huge)) ///
xlabel(0 (5) 10,labsize(huge)) ///
xtitle("Sophistication", size(huge)) ///
ylabel(0.0 (0.1) 0.2, format(%02.1f) labsize(huge))  ///
ytitle("Density", size(huge))

**********
*Graph a kernel density plot of the sophistication index*
**********

kdensity Sophisticationindexm00, aspect(1) scheme(s1mono) 

****************
*Create a political sophistication scale ranging from zero to one that* 
*combines measures of political knowledge, interest and involvement*

*Note: This scale will become the basis of analysis for this paper*
****************

alpha Knowledge2m00 Interest2m00 Attendm00 Workm00 Displaym00 Donatecm00 /// 
Donatepm00, detail item generate(Sophisticationscalem00) casewise 

summarize Sophisticationscalem00

****************
*Create a new variable by stratifying the sophistication scale into thirds,* 
*corresponding to the "least," "moderately" and "most" politically* 
*sophisticated respondents in the sample*
****************

display 1552/3

table Sophisticationscalem00

gen Sophisticationm00 = .
replace Sophisticationm00 = 1 if Sophisticationscalem00 < .15 
replace Sophisticationm00 = 2 if Sophisticationscalem00 > .15 & /// 
Sophisticationscalem00 <= .25
replace Sophisticationm00 = 3 if Sophisticationscalem00 > .25 & ///
Sophisticationscalem00 < .

summarize Sophisticationm00

table Sophisticationm00

****************
*Obtain summary statistics (mean and standard deviation) for the components* 
*of the sophistication index, as well as the sophistication index itself,* 
*for each of the three segments of the mass public we have identified* 
*for this analysis*

*Note: The summary statistics for the entire sample for the political* 
*knowledge and interest in the campaigns variables are calculated here, too*
****************

*Political Knowledge*

summarize Knowledgem00

summarize Knowledgem00 if Sophisticationm00 == 1

summarize Knowledgem00 if Sophisticationm00 == 2

summarize Knowledgem00 if Sophisticationm00 == 3

*Interest in the campaigns*

summarize Interestm00

summarize Interestm00 if Sophisticationm00 == 1

summarize Interestm00 if Sophisticationm00 == 2

summarize Interestm00 if Sophisticationm00 == 3

*Involvement Index*

summarize Involvementindexm00 if Sophisticationm00 == 1

summarize Involvementindexm00 if Sophisticationm00 == 2

summarize Involvementindexm00 if Sophisticationm00 == 3

*Sophistication Index*

summarize Sophisticationindexm00 if Sophisticationm00 == 1

summarize Sophisticationindexm00 if Sophisticationm00 == 2

summarize Sophisticationindexm00 if Sophisticationm00 == 3

***************
*Exploratory factor analysis of the 2000 mass issue attitudes*

*Note: This procedure is conducted to determine appropriate "indicator*
*variables" for factors 1 and 2 (social welfare and cultural) in the* 
*confirmatory factor analysis*
****************

factor Servicesm00 Welfarem00 Insurancem00 Childcarem00 Schoolsm00 /// 
Assistblacksm00 Environm00 Defensem00 Abortionm00 Rhomosexualsthermm00 /// 
Jobdiscriminationm00, ipf factors(3)

*Note: The analysis indicates that attitudes toward defense spending and* 
*the role of women are appropriate indicator variables*
*for factor 1 and factor 2, respectively*

****************
*Create a scree plot of the factor analysis results*
*Note: This step is taken almost entirely in the interest of nostalgia!*
****************

screeplot, msymbol(Oh) mcolor(black) ylab(,angle(0)) aspect(1)

****************
*Obtain squared multiple correlation coefficients of each variable with all* 
*other variables*
****************

estat smc

****************
*Confirmatory factor analysis of the 2000 mass issue attitudes*

*Note: Attitudes toward defense spending and the school prayer are used as*
*"indicator variables" for factors 1 and 2* 
*(social welfare and cultural), respectively*

*Note: This step is done to assess the factor correlation between factors one*
*and two for the full ANES sample*
****************

sem (L1 ->Servicesm00) (L1 -> Welfarem00) /// 
(L1 -> Insurancem00) (L1 -> Childcarem00) (L1 -> Schoolsm00) ///
(L1 -> Assistblacksm00) (L1 -> Environm00) (L1 -> Defensem00) /// 
(L2 -> Abortionm00) (L2 -> Rhomosexualsthermm00) /// 
(L2 -> Jobdiscriminationm00), covstruct(_lexogenous, diagonal) /// 
standard cov(L1*L2) latent(L1 L2) nocapslatent

estat gof, stats (all)

****************
*Confirmatory multiple groups factor analysis of the 2000 mass issue attitudes*

*Note: Attitudes toward defense spending and the school prayer are used as*
*"indicator variables" for factors 1 and 2* 
*(social welfare and cultural), respectively*

*Note: This step is done to obtain the correlation between ideological*
*self-identifications and factor one for the entire mass public sample*
*in 2000*

*Note: This step also is done to assess equality of means and variances* 
*across groups*
****************

sem (L1 ->Servicesm00) (L1 -> Welfarem00) /// 
(L1 -> Insurancem00) (L1 -> Childcarem00) (L1 -> Schoolsm00) ///
(L1 -> Assistblacksm00) (L1 -> Environm00) (L1 -> Defensem00) /// 
(L2 -> Abortionm00) (L2 -> Rhomosexualsthermm00) /// 
(L2 -> Jobdiscriminationm00), covstruct(_lexogenous, diagonal) /// 
standard cov(L1*L2) latent(L1 L2) nocapslatent group (Sophisticationm00)  

estat ginvariant

estat gof, stats (all)

predict Factor1m00, latent(L1)

corrci Ideologym00 Factor1m00

*Here, we see the defense spending item does not* 
*exhibit mean invariance, and the welfare, child care and public schools* 
*spending items do not exhibit residual invariance*

****************
*Stratify the mass public according to sophistication, which is a scale* 
*combining political knowledge, interest and involvement*

*Note: The stratification procedure divides the mass public into three groups* 
*according to their level of political sophistication*

*Note: The ideological self-identifications variable is used in this procedure*
*because ideological self-identifications of individuals who fall into*
*each sophistication group later will be correlated with the first retained* 
*factor in the analysis*
****************

gen Ideologym002 = Ideologym00 if Sophisticationm00 == 1

gen Ideologym003 = Ideologym00 if Sophisticationm00 == 2

gen Ideologym004 = Ideologym00 if Sophisticationm00 == 3

****************
*Confirmatory factor analysis of the 2000 mass issue attitudes for the* 
*stratified sample*
*This step investigates more fully our hypothesis that a lack* 
*of sophistication drives the apparently multidimensional structure* 
*of mass political attitudes*

*Note: For each segment of the stratified sample, model fit is assessed* 
*and the correlation between the ideological self-identifications of citizens* 
*who fall in the group being examined and the first retained factor* 
*(hypothesized to be ideology) is estimated*

*Note: The procedure reports a ninety-five percent confidence interval* 
*for the estimated correlation*

*Note: The reported estimates thus reflect differences in the correlation*
*between ideological self-identifications and the first retained factor*
*across sophistication groups*

*Note: Ultimately, the key difference between this analysis and the prior*
*exploratory factor analysis is that the first retained factor here, although*
*representing ideology in each case, is estimated separately for each segment* 
*of the stratified sample*
****************

****************
*Least politically sophisticated third of the stratified sample*
****************

sem (L1 ->Servicesm00) (L1 -> Welfarem00) (L1 -> Insurancem00) /// 
(L1 -> Childcarem00) (L1 -> Schoolsm00) (L1 -> Assistblacksm00) /// 
(L1 -> Environm00) (L1 -> Defensem00) (L2 -> Abortionm00) /// 
(L2 -> Rhomosexualsthermm00) (L2 -> Jobdiscriminationm00), ///
covstruct(_lexogenous, diagonal) standard cov(L1*L2) latent(L1 L2) /// 
nocapslatent, if Sophisticationm00 == 1

estat gof, stats(all)

predict Factor1m00low, latent(L1)

corrci Ideologym002 Factor1m00low

****************
*Moderately politically sophisticated third of the stratified sample*
****************

sem (L1 ->Servicesm00) (L1 -> Welfarem00) (L1 -> Insurancem00) /// 
(L1 -> Childcarem00) (L1 -> Schoolsm00) (L1 -> Assistblacksm00) /// 
(L1 -> Environm00) (L1 -> Defensem00) (L2 -> Abortionm00) ///
(L2 -> Rhomosexualsthermm00) (L2 -> Jobdiscriminationm00), ///
covstruct(_lexogenous, diagonal) standard cov(L1*L2) latent(L1 L2) /// 
nocapslatent, if Sophisticationm00 == 2

estat gof, stats(all)

predict Factor1m00middle, latent(L1)

corrci Ideologym003 Factor1m00middle

****************
*Most politically sophisticated third of the stratified sample*
****************

sem (L1 ->Servicesm00) (L1 -> Welfarem00) /// 
(L1 -> Insurancem00) (L1 -> Childcarem00) (L1 -> Schoolsm00) ///
(L1 -> Assistblacksm00) (L1 -> Environm00) (L1 -> Defensem00) ///
(L2 -> Abortionm00) (L2 -> Rhomosexualsthermm00) (L2 -> Jobdiscriminationm00), /// 
covstruct(_lexogenous, unstructured) /// 
standard cov(L1*L2) latent(L1 L2) nocapslatent, if Sophisticationm00 == 3

estat gof, stats(all)

predict Factor1m00high, latent(L1)

corrci Ideologym004 Factor1m00high

*Note: The preceding three-step analysis produces identical results to a* 
*confirmatory multiple groups factor analysis in a single step*
*I chose to specify the models in this way in the interest*
*of conceptual clarity*

****************
*Stratify the mass public according to sophistication once more, but this time*
*the variable is measured for a small fraction of the mass public representing* 
*the absolutely most politically knowledgeable, interested and involved* 
*citizens � in other words, these citizens represent the members of the* 
*electorate who we expect to most resemble political elites in their* 
*organization of political attitudes*

*Specifically, these "hyper" sophisticates are operationalized as possessing* 
*a "very high" level of general political information, being* 
*"very much interested" in the campaign and having participated in at least* 
*one political activity during the course of the campaign*
****************

gen Ideologym005 = Ideologym00 if Knowledgem00 == 4 & Interestm00 == 2 & /// 
Involvementindexm00 > 0 

****************
*Correlate ideological self-identifications of the stratified sample* 
*(by sophistication) with the first retained factor*

*This procedure obtains correlations between the first retained factor and* 
*ideological identifications for the absolutely most politically* 
*knowledgeable, interested and involved citizens - our "hyper" sophisticates*
*Note: This procedure reports a ninety-five percent confidence interval* 
*for the estimated correlations*
****************

gen Hypersophisticatesm00 = .
replace Hypersophisticatesm00 = 1 if Ideologym005 == 1
replace Hypersophisticatesm00 = 1 if Ideologym005 == 2
replace Hypersophisticatesm00 = 1 if Ideologym005 == 3
replace Hypersophisticatesm00 = 1 if Ideologym005 == 4
replace Hypersophisticatesm00 = 1 if Ideologym005 == 5
replace Hypersophisticatesm00 = 1 if Ideologym005 == 6
replace Hypersophisticatesm00 = 1 if Ideologym005 == 7

corrci Ideologym005 Factor1m00high

****************
*Conduct a series of robustness checks to demonstrate that the sophistication* 
*effects are not a simple reflection of partisanship*
****************

****************
*Least politically sophisticated third of the stratified sample*
****************

corrci Ideologym002 Factor1m00low if Partyidm00 == 1

corrci Ideologym002 Factor1m00low if Partyidm00 == 2

****************
*Moderately politically sophisticated third of the stratified sample*
****************

corrci Ideologym003 Factor1m00middle if Partyidm00 == 1

corrci Ideologym003 Factor1m00middle if Partyidm00 == 2

****************
*Most politically sophisticated third of the stratified sample*
****************

corrci Ideologym004 Factor1m00high if Partyidm00 == 1

corrci Ideologym004 Factor1m00high if Partyidm00 == 2

****************
*"Hyper" sophisticates*
****************

corrci Ideologym005 Factor1m00high if Partyidm00 == 1

corrci Ideologym005 Factor1m00high if Partyidm00 == 2

****************
*2004 ANES Data*
****************

****************
*Recode symbolic predisposition variables*
****************

*Party identification*

*Note: Here, we recode the party identification variable by dividing "strong* 
*partisans" from "not strong partisans."  This step is done to demonstrate* 
*that the high level of constraint exhibited by sophisticated*
*citizens � particularly "hyper" sophisticates � is not merely an artifact* 
*of partisanship*

gen Partyidm04 = V043116
replace Partyidm04 = . if V043116 == 9
replace Partyidm04 = 1 if V043116 == 2
replace Partyidm04 = 1 if V043116 == 3
replace Partyidm04 = 1 if V043116 == 4
replace Partyidm04 = 1 if V043116 == 5
replace Partyidm04 = 1 if V043116 == 7
replace Partyidm04 = 1 if V043116 == 8
replace Partyidm04 = 2 if V043116 == 0 
replace Partyidm04 = 2 if V043116 == 6
label var Partyidm04 ///
"Partisan Strength"
label define Partisanstrengthm04 /// 
1 "1 Not strong identifiers" 2 "2 Strong party identifiers"
label values Partyidm04 Partisanstrengthm04

*Ideological self-identification*

gen Ideologym04 = V043085
replace Ideologym04 = . if V043085 == 80
replace Ideologym04 = . if V043085 == 88
replace Ideologym04 = . if V043085 == 89
replace Ideologym04 = 3 if V043085 == 4 & V043085a == 1
replace Ideologym04 = 3 if V043085 == 80 & V043085a == 1
replace Ideologym04 = 3 if V043085 == 88 & V043085a == 1
replace Ideologym04 = 4 if V043085a == 5 
replace Ideologym04 = 5 if V043085 == 4 & V043085a == 3
replace Ideologym04 = 5 if V043085 == 80 & V043085a == 3
replace Ideologym04 = 5 if V043085 == 88 & V043085a == 3
label var Ideologym04 ///
"Ideological Self-identification"
label define Ideologicalidentificationm04 /// 
1 "1 Extremely Liberal" 7 "7 Extremely conservative"
label values Ideologym04 Ideologicalidentificationm04

****************
*Recode issue attitude variables*

*Note: The eleven issues included in the analysis for 2004 are the following:* 
*services spending, welfare spending, government versus private health* 
*insurance, child care spending, public school spending, assistance to blacks,* 
*environment versus jobs, defense spending, abortion, feeling thermometer*
*of homosexuals and same-sex marriage*

*Note: All issue attitude variables other than the government versus private*
*health insurance, assistance to blacks,*
*environment versus jobs and defense spending variables are recoded* 
*so higher values reflect more conservative attitudes
****************

*Services spending*
*Note: This variable is reverse coded so higher values reflect* 
*more conservative attitudes*

gen Servicesm04 = V043136
replace Servicesm04 = . if V043136 == 80
replace Servicesm04 = . if V043136 == 88
replace Servicesm04 = . if V043136 == 89
replace Servicesm04 = 1 if V043136 == 7
replace Servicesm04 = 2 if V043136 == 6
replace Servicesm04 = 3 if V043136 == 5
replace Servicesm04 = 5 if V043136 == 3
replace Servicesm04 = 6 if V043136 == 2
replace Servicesm04 = 7 if V043136 == 1
label var Servicesm04 ///
"Attitudes Toward Government Provision of Services versus Lower Spending"
label define Servicesspendingm04 ///
1 "Government should provide many more services" ///
7 "Government should provide many fewer services"
label values Servicesm04 Servicesspendingm04

*Welfare spending*
*Note: This variable is reverse coded so higher values reflect* 
*more conservative attitudes*

gen Welfarem04 = V043169
replace Welfarem04 = . if V043169 == 8
replace Welfarem04 = . if V043169 == 9
replace Welfarem04 = 2 if V043169 == 5
replace Welfarem04 = 4 if V043169 == 7
label var Welfarem04 ///
"Attitudes Toward Welfare Spending"
label define Welfarespendingm04 /// 
1 "1 Increased" 2 "2 Kept about the same" 3 "3 Decreased" /// 
4 "4 Cut out entirely"  
label values Welfarem04 Welfarespendingm04 

*Government versus private insurance*

gen Insurancem04 = V043150
replace Insurancem04 = . if V043150 == 80
replace Insurancem04 = . if V043150 == 88
replace Insurancem04 = . if V043150 == 89
label var Insurancem04 ///
"Attitudes Toward Government versus Private Insurance"
label define Insuranceplanm04 /// 
1 "1 Government insurance plan" 7 "7 Private insurance plan"
label values Insurancem04 Insuranceplanm04

*Child care*
*Note: This variable is reverse coded so higher values reflect* 
*more conservative attitudes*

gen Childcarem04 = V043170
replace Childcarem04 = . if V043170 == 8
replace Childcarem04 = . if V043170 == 9
replace Childcarem04 = 2 if V043170 == 5
replace Childcarem04 = 4 if V043170 == 7
label var Childcarem04 ///
"Attitudes Toward Child Care Spending"
label define Childcarespendingm04 /// 
1 "1 Increased" 2 "2 Kept the same" 3 "3 Reduced" 4 "4 Cut out entirely"
label values Childcarem04 Childcarespendingm04

*Public school spending*
*Note: This variable is reverse coded so higher values reflect* 
*more conservative attitudes*

gen Schoolsm04 = V043166
replace Schoolsm04 = . if V043166 == 0
replace Schoolsm04 = . if V043166 == 8
replace Schoolsm04 = . if V043166 == 9
replace Schoolsm04 = 4 if V043166 == 7
replace Schoolsm04 = 2 if V043166 == 5
label var Schoolsm04 ///
"Attitudes Toward Public School Spending"
label define Schoolspendingm04 /// 
1 "1 Increased" 2 "2 Kept the same" 3 "3 Reduced" 4 "4 Cut out entirely"
label values Schoolsm04 Schoolspendingm04

*Government assistance to blacks*

gen Assistblacksm04 = V043158
replace Assistblacksm04 = . if V043158 == 80
replace Assistblacksm04 = . if V043158 == 88
replace Assistblacksm04 = . if V043158 == 89
label var Assistblacksm04 ///
"Attitudes Toward Programs to Assist Blacks" 
label define Assistanceblacksm04 /// 
1 "1 Government should help blacks" 7 "7 Blacks should help themselves"
label values Assistblacksm04 Assistancem04

*Environment versus jobs*

gen Environm04 = V043182
replace Environm04 = . if V043182 == 80
replace Environm04 = . if V043182 == 88
replace Environm04 = . if V043182 == 89
label var Environm04 /// 
"Attitudes Toward Protecting the Environment versus Protecting Jobs"
label define Environmentm04 ///
1 "1 Protect environment, even if it costs jobs and standard of living" ///7 "7 Jobs and standard of living more important"
label values Environm04 Environmentm04

*Defense*

gen Defensem04 = V043142
replace Defensem04 = . if V043142 == 80
replace Defensem04 = . if V043142 == 88
replace Defensem04 = . if V043142 == 89
label var Defensem04 ///
"Attitudes Toward Defense Spending"
label define Defensespendingm04 /// 
1 "1 Decrease should decrease defense spending" ///
7 "7 Government should increase defense spending"
label values Defensem04 Defensespendingm04

*Abortion*
*Note: This variable is reverse coded so higher values reflect* 
*more conservative attitudes*

gen Abortionm04 = V045132
replace Abortionm04 = . if V045132 == 7
replace Abortionm04 = . if V045132 == 8
replace Abortionm04 = . if V045132 == 9
replace Abortionm04 = 1 if V045132 == 4
replace Abortionm04 = 2 if V045132 == 3
replace Abortionm04 = 3 if V045132 == 2
replace Abortionm04 = 4 if V045132 == 1
label var Abortionm04 ///
"Attitudes Toward Abortion"
label define Abortionattitudesm04 /// 
1 "1 By law, a woman should always be able to obtain an abortion as a matter of personal choice" /// 
2 "2 The law should permit abortion for reasons other than rape, incest, or danger to the woman's life, but only after the need for the abortion has been clearly established" /// 
3 "3 The law should permit abortion only in case of rape, incest or when the woman's life is in danger" /// 
4 "4 By law, abortion should never be permitted"
label values Abortionm04 Abortionattitudesm04

*Feeling thermometer of homosexuals*
*Note: This variable is recoded so that higher values reflect*
*more conservative attitudes*

*Although recoding feeling thermometer variables is rare, the step is taken* 
*here in order to ensure that all variables in the analysis are coded in the* 
*same direction, thus avoiding potentially confusing negative factor loadings*
 
gen Homosexualsthermm04 = V045074
replace Homosexualsthermm04 = . if V045074 == 777
replace Homosexualsthermm04 = . if V045074 == 888
replace Homosexualsthermm04 = . if V045074 == 889

gen Rhomosexualsthermm04 = 100 - Homosexualsthermm04 
label var Rhomosexualsthermm04 ///
"Feeling Thermometer of Homosexuals"
label define Rhomosexualsthermometerm04 0 "0 Warm" 100 "100 Cold"
label values Rhomosexualsthermm04 Rhomosexualsthermometerm04

*Same-sex marriage*
*Note: This variable is reverse coded so higher values reflect* 
*more conservative attitudes*

gen Marriagem04 = V043210
replace Marriagem04 = . if V043210 == 7
replace Marriagem04 = . if V043210 == 8
replace Marriagem04 = . if V043210 == 9
replace Marriagem04 = 2 if V043210 == 5
label var Marriagem04 ///
"Attitudes Toward Same-Sex Marriage"
label define Marriageviewsm04 /// 
1 "1 Should be allowed" /// 
2 "2 Should not be allowed to marry, but should be allowed to legally form a civil union" ///
3 "3 Should not be allowed"
label values Marriagem04 Marriageviews04

****************
*Recode political sophistication variables*

*Note: Political sophistication is conceptualized in this analysis as a*
*combination of political knowledge, interest and involvement*

*Note: These variables are all reverse coded so that higher values reflect* 
*greater political sophistication*
****************

****************
*Recode political knowledge variable*

*Note: Political knowledge is conceptualized in this analysis as the* 
*interviewer's assessment of the respondent's level of general* 
*political information*
****************

*Political knowledge*
*Note: This variable is reverse coded so that higher values reflect greater* 
*political knowledge*

gen Knowledgem04 = V043403
replace Knowledgem04 = . if V043403 == 0
replace Knowledgem04 = 0 if V043403 == 5 
replace Knowledgem04 = 1 if V043403 == 4
replace Knowledgem04 = 2 if V043403 == 3
replace Knowledgem04 = 3 if V043403 == 2
replace Knowledgem04 = 4 if V043403 == 1
label var Knowledgem04 ///
"Interviewer's Assessment of the Respondent's Level of Political Information"
label define Knowledgepoliticsm04 ///
0 "Very low" 1 "Fairly Low" 2 "Average" 3 "Fairly High" 4 "Very High"
label values Knowledgem04 Knowledgepoliticsm04

****************
*Divide the political knowledge variable by the number of non-zero categories* 
*it contains (4) so that the variable ranges from zero to one*
****************

gen Knowledge2m04 = Knowledgem04/4

****************
*Recode interest in the political campaigns variable*
****************

*Interest in the campaigns*
*Note: This variable is reverse coded so that higher values reflect greater* 
*political interest*

gen Interestm04 = V045001
replace Interestm04 = . if V045001 == 8 
replace Interestm04 = . if V045001 == 9
replace Interestm04 = 0 if V045001 == 5
replace Interestm04 = 1 if V045001 == 3
replace Interestm04 = 2 if V045001 == 1
label var Interestm04 ///
"Interest in the the Campaigns"
label define Interestcampaignm04 /// 
0 "0 Not much interested" 1 "1 Somewhat interested" 2 "2 Very much interested"
label values Interestm04 Interestcampaignm04 

****************
*Divide the interest in the campaigns variable by the number of non-zero*
*categories it contains (2) so that the variable ranges from zero to one*
****************

gen Interest2m04 = Interestm04/2

****************
*Recode political involvement variables*
*Note: These variables are recoded so that higher values reflect greater* 
*political involvement*
****************

*Attendance at political events*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Attendm04 = V045011
drop if Attendm04 == 8
drop if Attendm04 == 9
replace Attendm04 = 0 if V045011 == 5
label var Attendm04 ///
"Attend a Political Event"
label define Attendancem04 /// 
0 "0 No" 1 "1 Yes"
label values Attendm04 Attendancem04

*Work for a political candidate*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Workm04 = V045013
drop if Workm04 == 8
drop if Workm04 == 9
replace Workm04 = 0 if V045013 == 5
label var Workm04 ///
"Work for a Political Candidate"
label define Workedm04 /// 
0 "0 No" 1 "1 Yes"
label values Workm04 Workedm04

*Political expression in the form of a campaign button or sticker*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Displaym04 = V045012
drop if Displaym04 == 8
drop if Displaym04 == 9
replace Displaym04 = 0 if V045012 == 5
label var Displaym04 ///
"Display a Campaign Button or Sticker"
label define Displaypoliticsm04 /// 
0 "0 No" 1 "1 Yes"
label values Displaym04 Displaypoliticsm04

*Donation to a political candidate*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Donatecm04 = V045014
drop if Donatecm04 == 8
drop if Donatecm04 == 9
replace Donatecm04 = 0 if V045014 == 5
label var Donatecm04 ///
"Donate money to a political candidate"
label define Donatecandidatem04 /// 
0 "0 No" 1 "1 Yes"
label values Donatecm04 Donatemoneycm04

*Donation to a political party*
*Note: This value is recoded so that higher values reflect greater* 
*political involvement*

gen Donatepm04 = V045015
drop if Donatepm04 == 8
drop if Donatepm04 == 9
replace Donatepm04 = 0 if V045015 == 5
label var Donatepm04 ///
"Donate money to a political party"
label define Donatepartym04 /// 
0 "0 No" 1 "1 Yes"
label values Donatepm04 Donatepartym04

****************
*Create a five-point political involvement index that will be used to display* 
*summary statistics of political involvement*
****************

gen Involvementindexm04 = Attendm04 + Workm04 + Displaym04 + Donatecm04 /// 
+ Donatepm04

summarize Involvementindexm04

****************
*Create an eleven-point political sophistication index that combines* 
*measures of political knowledge, interest and involvement*

*Note: This index will be used to display summary statistics* 
*of the sophistication measure*
****************

gen Sophisticationindexm04 = Knowledgem04 + Interestm04 + Involvementindexm04

summarize Sophisticationindexm04

*Plot a histogram of the sophistication index*

histogram Sophisticationindexm04, aspect(1) fcolor(gs14) lcolor(black) /// 
discrete scheme(s1mono) ///
plotregion(lcolor(black))graphregion(margin(medsmall)) ///
title("2004", size(huge)) ///
xlabel(0 (5) 10,labsize(huge)) ///
xtitle("Sophistication", size(huge)) ///
ylabel(0.0 (0.1) 0.2, format(%02.1f) labsize(huge))  ///
ytitle("Density", size(huge))

*Graph a kernel density plot of the sophistication index*

kdensity Sophisticationindexm04, aspect(1) scheme(s1mono) 

****************
*Create a political sophistication scale ranging from zero to one that* 
*combines measures of political knowledge, interest and involvement*
*Note: This scale will become the basis of analysis for this paper*

alpha Knowledge2m04 Interest2m04 Attendm04 Workm04 Displaym04 Donatecm04 /// 
Donatepm04, detail item generate(Sophisticationscalem04) casewise

summarize Sophisticationscalem04

****************
*Create a new variable by stratifying the sophistication scale into thirds,* 
*corresponding to the "least," "moderately" and "most" politically* 
*sophisticated respondents in the sample*
****************

display 1037/3

table Sophisticationscalem04

gen Sophisticationm04 = .
replace Sophisticationm04 = 1 if Sophisticationscalem04 < .20
replace Sophisticationm04 = 2 if Sophisticationscalem04 > .18 & /// 
Sophisticationscalem04 < .30
replace Sophisticationm04 = 3 if Sophisticationscalem04 > .30 & ///
Sophisticationscalem04 < .

summarize Sophisticationm04

table Sophisticationm04

****************
*Obtain summary statistics (mean and standard deviation) for the components* 
*of the sophistication index, as well as the sophistication index itself,* 
*for each of the three segments of the mass public we have identified* 
*for this analysis*
*Note: The summary statistics for the entire sample for the political* 
*knowledge and interest in the campaigns variables are calculated here, too*
****************

*Political Knowledge*

summarize Knowledgem04

summarize Knowledgem04 if Sophisticationm04 == 1

summarize Knowledgem04 if Sophisticationm04 == 2

summarize Knowledgem04 if Sophisticationm04 == 3

*Interest in the campaigns*

summarize Interestm04

summarize Interestm04 if Sophisticationm04 == 1

summarize Interestm04 if Sophisticationm04 == 2

summarize Interestm04 if Sophisticationm04 == 3

*Involvement Index*

summarize Involvementindexm04 if Sophisticationm04 == 1

summarize Involvementindexm04 if Sophisticationm04 == 2

summarize Involvementindexm04 if Sophisticationm04 == 3

*Sophistication Index*

summarize Sophisticationindexm04 if Sophisticationm04 == 1

summarize Sophisticationindexm04 if Sophisticationm04 == 2

summarize Sophisticationindexm04 if Sophisticationm04 == 3

***************
*Exploratory factor analysis of the 2004 mass issue attitudes*
*Note: This procedure is conducted to determine appropriate "indicator*
*variables" for factors 1 and 2 (social welfare and cultural) in the* 
*confirmatory factor analysis*
****************

factor Servicesm04 Welfarem04 Insurancem04 Childcarem04 Schoolsm04 /// 
Assistblacksm04 Environm04 Defensem04 Abortionm04 rHomosexualsMarriagem04, /// 
ipf factors(3)

*Note: The analysis indicates that attitudes toward defense spending and* 
*the role of women are appropriate indicator variables*
*for factor 1 and factor 2, respectively*

****************
*Create a scree plot of the factor analysis results*
*Note: This step is taken almost entirely in the interest of nostalgia!*
****************

screeplot, msymbol(Oh) mcolor(black) ylab(,angle(0)) aspect(1)

****************
*Obtain squared multiple correlation coefficients of each variable with all* 
*other variables*
****************

estat smc

****************
*Confirmatory factor analysis of the 2004 mass issue attitudes*

*Note: Attitudes toward defense spending and the school prayer are used as*
*"indicator variables" for factors 1 and 2* 
*(social welfare and cultural), respectively*

*Note: This step is done to assess the factor correlation between factors one*
*and two for the full ANES sample*
****************

sem (L1 -> Servicesm04) (L1 -> Welfarem04) (L1 -> Insurancem04) ///
(L1 -> Childcarem04) (L1 -> Schoolsm04) (L1 -> Assistblacksm04) ///
(L1 -> Environm04) (L1 -> Defensem04) (L2 -> Abortionm04) ///
(L2 -> Rhomosexualsthermm04) (L2 -> Marriagem04), /// 
covstruct(_lexogenous, diagonal) standard cov(L1*L2) latent(L1 L2) nocapslatent 

estat gof, stats(all)

****************
*Confirmatory multiple groups factor analysis of the 2004 mass issue attitudes*

*Note: Attitudes toward defense spending and the school prayer are used as*
*"indicator variables" for factors 1 and 2* 
*(social welfare and cultural), respectively*

*Note: This step is done to obtain the correlation between ideological*
*self-identifications and factor one for the entire mass public sample*
*in 2004*

*Note: This step also is done to assess equality of means and variances* 
*across groups*
****************

sem (L1 -> Servicesm04) (L1 -> Welfarem04) (L1 -> Insurancem04) ///
(L1 -> Childcarem04) (L1 -> Schoolsm04) (L1 -> Assistblacksm04) ///
(L1 -> Environm04) (L1 -> Defensem04) (L2 -> Abortionm04) ///
(L2 -> Rhomosexualsthermm04) (L2 -> Marriagem04), ///
covstruct(_lexogenous, diagonal) standard cov(L1*L2) latent(L1 L2) ///
nocapslatent group (Sophisticationm04)  

estat ginvariant

estat gof, stats(all)

predict Factor1m04, latent(L1)

corrci Ideologym04 Factor1m04

*Here, we see the unemployed, role of women and abortion indicators do not* 
*exhibit mean invariance, and the services, assistance to blacks and role* 
*of women in society items do not exhibit residual invariance*

****************
*Stratify the mass public according to sophistication, which is a scale* 
*combining political knowledge, interest and involvement*

*Note: The stratification procedure divides the mass public into three groups* 
*according to their level of political sophistication*

*Note: The ideological self-identifications variable is used in this procedure*
*because ideological self-identifications of individuals who fall into*
*each sophistication group later will be correlated with the first retained* 
*factor in the analysis*
****************

gen Ideologym042 = Ideologym04 if Sophisticationm04 == 1

gen Ideologym043 = Ideologym04 if Sophisticationm04 == 2

gen Ideologym044 = Ideologym04 if Sophisticationm04 == 3

****************
*Confirmatory factor analysis of the 2040 mass issue attitudes for the* 
*stratified sample*
*This step investigates more fully our hypothesis that a lack* 
*of sophistication drives the apparently multidimensional structure* 
*of mass political attitudes*

*Note: For each segment of the stratified sample, model fit is assessed* 
*and the correlation between the ideological self-identifications of citizens* 
*who fall in the group being examined and the first retained factor* 
*(hypothesized to be ideology) is estimated*

*Note: The procedure reports a ninety-five percent confidence interval* 
*for the estimated correlation*

*Note: The reported estimates thus reflect differences in the correlation*
*between ideological self-identifications and the first retained factor*
*across sophistication groups*

*Note: Ultimately, the key difference between this analysis and the prior*
*exploratory factor analysis is that the first retained factor here, although*
*representing ideology in each case, is estimated separately for each segment* 
*of the stratified sample*
****************

****************
*Least politically sophisticated third of the stratified sample*
****************

sem (L1 -> Servicesm04) (L1 -> Welfarem04) (L1 -> Insurancem04) /// 
(L1 -> Childcarem04) (L1 -> Schoolsm04) (L1 -> Assistblacksm04) /// 
(L1 -> Environm04) (L1 -> Defensem04) (L2 -> Abortionm04) ///
(L2 -> Rhomosexualsthermm04) (L2 -> Marriagem04), ///
covstruct(_lexogenous, diagonal) standard latent(L1 L2) nocapslatent /// 
cov(L1*L2), if Sophisticationm04 == 1

estat gof, stats(all)

predict Factor1m04low, latent(L1)

corrci Ideologym042 Factor1m04low

****************
*Moderately politically sophisticated third of the stratified sample*
****************

sem (L1 -> Servicesm04) (L1 -> Welfarem04) (L1 -> Insurancem04) /// 
(L1 -> Childcarem04) (L1 -> Schoolsm04) (L1 -> Assistblacksm04) /// 
(L1 -> Environm04) (L1 -> Defensem04) (L2 -> Abortionm04) /// 
(L2 -> Rhomosexualsthermm04) (L2 -> Marriagem04), ///
covstruct(_lexogenous, diagonal) standard latent (L1 L2) nocapslatent ///
cov(L1*L2), if Sophisticationm04 == 2

estat gof, stats(all)

predict Factor1m04middle, latent(L1)

corrci Ideologym043 Factor1m04middle

****************
*Most politically sophisticated third of the stratified sample*
****************

sem (L1 -> Servicesm04) (L1 -> Welfarem04) (L1 -> Insurancem04) /// 
(L1 -> Childcarem04) (L1 -> Schoolsm04) (L1 -> Assistblacksm04) /// 
(L1 -> Environm04) (L1 -> Defensem04) (L2 -> Abortionm04) /// 
(L2 -> Rhomosexualsthermm04) (L2 -> Marriagem04), ///
covstruct(_lexogenous, diagonal) standard latent (L1 L2) nocapslatent ///
cov(L1*L2), if Sophisticationm04 == 3

estat gof, stats(all)

predict Factor1m04high, latent(L1)

corrci Ideologym044 Factor1m04high

*Note: The preceding three-step analysis produces identical results to a* 
*confirmatory multiple groups factor analysis in a single step*
*I chose to specify the models in this way in the interest*
*of conceptual clarity*

****************
*Stratify the mass public according to sophistication once more, but this time*
*the variable is measured for a small fraction of the mass public representing* 
*the absolutely most politically knowledgeable, interested and involved* 
*citizens � in other words, these citizens represent the members of the* 
*electorate who we expect to most resemble political elites in their* 
*organization of political attitudes*

*Specifically, these "hyper" sophisticates are operationalized as possessing* 
*a "very high" level of general political information, being* 
*"very much interested" in the campaign and having participated in at least* 
*one political activity during the course of the campaign*
****************

gen Ideologym045 = Ideologym04 if Knowledgem04 == 4 & Interestm04 == 2 & /// 
Involvementindexm04 > 0 

****************
*Correlate ideological self-identifications of the stratified sample* 
*(by sophistication) with the first retained factor*

*This procedure obtains correlations between the first retained factor and* 
*ideological identifications for the absolutely most politically* 
*knowledgeable, interested and involved citizens - our "hyper" sophisticates*

*Note: This procedure reports a ninety-five percent confidence interval* 
*for the estimated correlations*
****************

gen Hypersophisticatesm04 = .
replace Hypersophisticatesm04 = 1 if Ideologym045 == 1
replace Hypersophisticatesm04 = 1 if Ideologym045 == 2
replace Hypersophisticatesm04 = 1 if Ideologym045 == 3
replace Hypersophisticatesm04 = 1 if Ideologym045 == 4
replace Hypersophisticatesm04 = 1 if Ideologym045 == 5
replace Hypersophisticatesm04 = 1 if Ideologym045 == 6
replace Hypersophisticatesm04 = 1 if Ideologym045 == 7

corrci Ideologym045 Factor1m04high

****************
*Conduct a series of robustness checks to demonstrate that the sophistication* 
*effects are not a simple reflection of partisanship*
****************

****************
*Least politically sophisticated third of the stratified sample*
****************

corrci Ideologym042 Factor1m04low if Partyidm04 == 1

corrci Ideologym042 Factor1m04low if Partyidm04 == 2

****************
*Moderately politically sophisticated third of the stratified sample*
****************

corrci Ideologym043 Factor1m04middle if Partyidm04 == 1

corrci Ideologym043 Factor1m04middle if Partyidm04 == 2

****************
*Most politically sophisticated third of the stratified sample*
****************

corrci Ideologym044 Factor1m04high if Partyidm04 == 1

corrci Ideologym044 Factor1m04high if Partyidm04 == 2

****************
*"Hyper" sophisticates*
****************

corrci Ideologym045 Factor1m04high if Partyidm04 == 1

corrci Ideologym045 Factor1m04high if Partyidm04 == 2
